df_gapminder%>%
select(country, year, lifeExp)%>%
slice(1)# A tibble: 1 × 3
country year lifeExp
<fct> <int> <dbl>
1 Afghanistan 1952 28.8
Clase 11- Trabajando con Data Frames-columnas
Realizar manipulaciones a los datos contenidos en una DF según diversos criterios, en particular en operaciones que afectan a las columnas o atributos.
A diferencia de las operaciones que revisamos en la Clase 10 donde aplicamos ciertas funciones para actuar sobre las filas, en esta oportunidad vamos a actuar sobre las columnas con una serie de funciones.
Revisar presentación e igualmente el qmd disponible en https://github.com/javendaXgh/r4dsucv2024/blob/main/clases/clase_11.qmd
Se revisarán distintos métodos para seleccionar o deseleccionar columas de una data frame.
Selecciona columnas de una DF
Por nombre de las columnas:
df_gapminder%>%
select(country, year, lifeExp)%>%
slice(1)# A tibble: 1 × 3
country year lifeExp
<fct> <int> <dbl>
1 Afghanistan 1952 28.8
Por índice de la columna
df_gapminder%>%
select(1, 3, 4)%>%
slice(1)# A tibble: 1 × 3
country year lifeExp
<fct> <int> <dbl>
1 Afghanistan 1952 28.8
Uso de operador sustracción para no selección
Por nombre
df_gapminder%>%
select(-continent, -gdpPercap, -continent, -pop )%>%
slice(1)# A tibble: 1 × 3
country year lifeExp
<fct> <int> <dbl>
1 Afghanistan 1952 28.8
Por índice
df_gapminder%>%
select(-c(2,5,6))%>%
slice(1)# A tibble: 1 × 3
country year lifeExp
<fct> <int> <dbl>
1 Afghanistan 1952 28.8
Deseleccionar usando el operador de negación !
Por nombre
df_gapminder%>%
select(!c(continent, gdpPercap, pop))%>%
slice(1)# A tibble: 1 × 3
country year lifeExp
<fct> <int> <dbl>
1 Afghanistan 1952 28.8
Por índice
df_gapminder%>%
select(!c(2,5,6))%>%
slice(1)# A tibble: 1 × 3
country year lifeExp
<fct> <int> <dbl>
1 Afghanistan 1952 28.8
Cambiar el nombre de una columna. Primero se coloca el nombre nuevo y luego el operador de igualdad y posteriormente el nombre que tiene actualmente la columna
df_gapminder%>%
rename(anno=year, pais= country)%>%
select(anno, pais)# A tibble: 1,704 × 2
anno pais
<int> <fct>
1 1952 Afghanistan
2 1957 Afghanistan
3 1962 Afghanistan
4 1967 Afghanistan
5 1972 Afghanistan
6 1977 Afghanistan
7 1982 Afghanistan
8 1987 Afghanistan
9 1992 Afghanistan
10 1997 Afghanistan
# ℹ 1,694 more rows
Crear una nueva columna en una DF, en este caso una columna que calcula el PIB
df_gapminder_pib <- df_gapminder%>%
mutate(pib= gdpPercap* pop)%>%
select(country, year, pib)
head(df_gapminder_pib, 3)# A tibble: 3 × 3
country year pib
<fct> <int> <dbl>
1 Afghanistan 1952 6567086330.
2 Afghanistan 1957 7585448670.
3 Afghanistan 1962 8758855797.
La función ifelse funciona vectorizadamente, es decir, se aplica sobre cada valor de una determinada fila de la data frame y su objetivo es evaluar si una determinada condición que es establecida se cumple o no, para un determinado valor.
La condición evaluada solo puede arrojar un valor verdadero (TRUE) o uno falso (FALSE). Si arroja un verdadero ocurrirá un suceso A y en caso de no cumplirse ocurrirá un suceso B.
La sintáxis es ifelse(condición a evaluar, ocurre A, ocurre b) , por ejemplo:
a <- 4
b <- 7
ifelse (a>b, "es mayor", "es menor")
dando de resultado la ejecución anterior “es menor” ya que al evaluar si 4 es mayor que 7, el resultado es FALSE y por lo tanto se irá al suceso B que es arrojar el valor “es menor”.
Vamos a estudiar cuáles países tienen un PIB por encima del promedio de los PIB´s para el año 2007. A los países que estén por encima les vamos a asignar una categoría que se llamará “pib_up_mean” y a los que estén por debajo otra que se llame “pib_down_mean”.
Primero creamos la DF con los valores que vamos a evaluar
df_pib_2007 <- df_gapminder %>%
filter(year==2007)%>%
mutate(pib= gdpPercap* pop)%>%
select(country, pib)
head(df_pib_2007, 2)# A tibble: 2 × 2
country pib
<fct> <dbl>
1 Afghanistan 31079291949.
2 Albania 21376411360.
En caso de que los PIBs se presenten con notación exponencial o científica se hace el siguiente setting
options(scipen=999)Igualmente vamos a evaluar cuál es el promedio del PIB y lo asignamos a la variable pib_promedio
pib_promedio =mean(df_pib_2007$pib)
pib_promedio[1] 409220666999
La columna que vamos a crear se llama “tipo_pib”
df_pib_2007 <- df_pib_2007%>%
mutate(tipo_pib =ifelse(pib>=pib_promedio, # condición a evaluar
"pib_up_mean", # caso verdadero => ocurre a
"pib_down_mean")) #caso falso => ocurre b
df_pib_2007%>%
sample_n(4)# A tibble: 4 × 3
country pib tipo_pib
<fct> <dbl> <chr>
1 Israel 164029908950. pib_down_mean
2 Mozambique 16433892152. pib_down_mean
3 Guinea-Bissau 852652874. pib_down_mean
4 Kuwait 118530454006. pib_down_mean
Ahora vamos a asignar tres categorías según el tamaño del PIB.
| Condición | Categoría a asignar |
|---|---|
| pib mayor a tercer cuantil | ‘super_pib’ |
| pib entre 1 er cuantil y 3 er cuantil | ‘medio_pib’ |
| pib por debajo de 1 er cuantil | ‘bajo_pib’ |
Obtener cuantiles.
cuantiles_pib <- quantile(df_pib_2007$pib)
cuantiles_pib 0% 25% 50% 75% 100%
319014077 17438491194 57869055458 275959963297 12934458535085
#fijar variables
tercer_cuantil <- cuantiles_pib[4]
primer_cuantil <- cuantiles_pib[2]Nayuha, de forma apropiada investigó cuál función se usa para obtener estos valores quantile y cómo se pueden asignar a una variable, dado que la salida que genera la función summary no es maleable para extraer datos individuales como los valores asociados a un cuantil u otro.
df_pib_2007 <- df_pib_2007%>%
arrange(desc(pib))%>%
mutate(tipo_pib2 =ifelse(pib<= primer_cuantil, # condición a evaluar
"bajo_pib",# caso verdadero => ocurre a
ifelse(pib>= tercer_cuantil, # caso falso => ocurre b y lleva a una 2da eval
'super_pib', # caso verdadero => ocurre b-a
'medio_pib') # caso falso => ocurre b-b
)
)
head(df_pib_2007,3)# A tibble: 3 × 4
country pib tipo_pib tipo_pib2
<fct> <dbl> <chr> <chr>
1 United States 1.29e13 pib_up_mean super_pib
2 China 6.54e12 pib_up_mean super_pib
3 Japan 4.04e12 pib_up_mean super_pib
table(df_pib_2007$tipo_pib)
pib_down_mean pib_up_mean
117 25
table(df_pib_2007$tipo_pib2)
bajo_pib medio_pib super_pib
36 70 36
hist (df_pib_2007$pib/1000000,
col = 4,
breaks=20,
main = "Histograma PIB Países",
xlab = "Valor PIB",
ylab = "Frecuencia")head(df_pib_2007,10)# A tibble: 10 × 4
country pib tipo_pib tipo_pib2
<fct> <dbl> <chr> <chr>
1 United States 1.29e13 pib_up_mean super_pib
2 China 6.54e12 pib_up_mean super_pib
3 Japan 4.04e12 pib_up_mean super_pib
4 India 2.72e12 pib_up_mean super_pib
5 Germany 2.65e12 pib_up_mean super_pib
6 United Kingdom 2.02e12 pib_up_mean super_pib
7 France 1.86e12 pib_up_mean super_pib
8 Brazil 1.72e12 pib_up_mean super_pib
9 Italy 1.66e12 pib_up_mean super_pib
10 Mexico 1.30e12 pib_up_mean super_pib
df_pib_2007%>%
slice_tail(n=10)# A tibble: 10 × 4
country pib tipo_pib tipo_pib2
<fct> <dbl> <chr> <chr>
1 Burundi 3608510288. pib_down_mean bajo_pib
2 Lesotho 3158513357. pib_down_mean bajo_pib
3 Eritrea 3146934084. pib_down_mean bajo_pib
4 Central African Republic 3084613079. pib_down_mean bajo_pib
5 Liberia 1323912407. pib_down_mean bajo_pib
6 Gambia 1270911775. pib_down_mean bajo_pib
7 Djibouti 1033689705. pib_down_mean bajo_pib
8 Guinea-Bissau 852652874. pib_down_mean bajo_pib
9 Comoros 701111696. pib_down_mean bajo_pib
10 Sao Tome and Principe 319014077. pib_down_mean bajo_pib
Muestra aleatoria
df_pib_2007%>%
filter(tipo_pib2== 'medio_pib')%>%
sample_n(8)# A tibble: 8 × 4
country pib tipo_pib tipo_pib2
<fct> <dbl> <chr> <chr>
1 Bahrain 21112675360. pib_down_mean medio_pib
2 Iraq 122952583891. pib_down_mean medio_pib
3 Botswana 20603633702. pib_down_mean medio_pib
4 Sudan 110062906753. pib_down_mean medio_pib
5 Ireland 167141167138. pib_down_mean medio_pib
6 Libya 72790086208. pib_down_mean medio_pib
7 Morocco 128958323770. pib_down_mean medio_pib
8 Afghanistan 31079291949. pib_down_mean medio_pib
Todas las operaciones realizadas anteriormente, tiene sentido asignarlas a un nuevo objeto, ya que se está modificando la estructura de los datos de entrada con los que estamos trabando. P.ej:
df_gap_pib <- df_gapminder%>%
mutate(pib= gdpPercap* pop) %>%
rename(pais= country, anno=year) %>%
select(pais, anno, pib)
head(df_gap_pib, 2)# A tibble: 2 × 3
pais anno pib
<fct> <int> <dbl>
1 Afghanistan 1952 6567086330.
2 Afghanistan 1957 7585448670.
Capítulo 4 R4DS (temas pasados referente a variables y operaciones básicas)
Capítulo 5 R4DS: comparaciones, operadores lógicos, arrange, select, mutate, summarise, pipe operator. En el capítulo se tratan los valores faltantes NA que luego serán abordados